package com.utils;





import javax.sql.DataSource;
import java.sql.Connection;

public class ConnUtil {
    /*
    * 使用ThreadLocal 维护变量的时候，它为每一个使用该变量的线程提供一个副本
    * */
    private  ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();

    private DataSource dataSource;

    public void setDataSource(DataSource dataSource) {
       this.dataSource=dataSource;
    }
    /*
    * 获取当前线程上的连接
    * */
    public Connection getThreadConnection() {
        try {
            //先直接从ThreadLocal上获取
            Connection connection = threadLocal.get();
            //再判断一下当前线程上是否有连接
            if (connection == null) {
                /*
                * 要是没有就从数据源上获取一个连接，
                * 并存入ThreadLocal中*/
                connection=dataSource.getConnection();
                threadLocal.set(connection);
            }
            //返回当前线程上的连接
              return connection;
    }catch (Exception e){
            throw  new RuntimeException(e);
        }
    }
    /*
    * 将连接和线程进行解绑*/
    public  void removeConnection(){
        threadLocal.remove();
    }


}
